home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / dsp / dspgroup / bell212.arc / TMAIN.ASM < prev    next >
Encoding:
Assembly Source File  |  1986-07-25  |  13.6 KB  |  428 lines

  1.     TITL    'TMS32011 BASED 212A MODEM '
  2.     IDT    'MAIN'
  3.     OPTION    XREF,TUNLST
  4. **********************************************************
  5. ***          -  DSP MODEM PROGRAM    -           ***
  6. **********************************************************
  7. *** TASKMASA.ASM --- This source contains the rewrite  ***
  8. ***             of the modem code to time slice   ***
  9. ***             the tasks and to operate with     ***
  10. ***             a CODEC device for operation on   ***
  11. ***             the demo board.               ***
  12. *** This interum update executes the 9.6KHz sample     ***
  13. *** rate.  It includes the updates to operate with a   ***
  14. *** CODEC device and a TMS32011.  It interfaces to a   ***
  15. *** TMS7041 device for the DTE interface.           ***
  16. *** This version include experimental code to skip     ***
  17. *** the FIR bandpass filter.  It also will try some    ***
  18. *** experimental code to fine tune carrier tracking.   ***
  19. ***                               ***
  20. ***   WRITTEN BY: PETER EHLIG                   ***
  21. ***                               ***
  22. ***   COPYRIGHT TEXAS INSTRUMENTS,  07/25/86           ***
  23. ***                               ***
  24. **********************************************************
  25.     DEF  MASTER
  26.     DEF  BAUDST,BDCLK1,BDCLK2,DECODE
  27.     DEF  DEMOD,DEMODB,DUMMY,DUMXMT
  28.     DEF  GETDBT,OUT,TRENDS
  29.     REF  TSKSEQ,TSKXMT
  30.     REF  PLLC,BPLLC,WAIT,COMD,COEF,WAIT1
  31.        PAGE
  32.        COPY  TASKMAS.EQU
  33. ***************************************************************
  34. *  The following code is the time sliced code task master.    *
  35. *  The routine monitors the status of the modem operations    *
  36. *  and sequences the code appropriately.              *
  37. ***************************************************************
  38. MASTER    EQU  $
  39.     LAC  ONE,4    CHECK OPERATING STATUS FOR
  40.     AND  RECST    FOR CARRIER DETECT
  41.     BNZ  CARLCK    IF CDT THEN RUN MODEM
  42.     B    NORMAL    IF DETECTED EXECUTE NORMAL SEQUENCE
  43. DBUG1    NOP         *  STORE IN XMTOUT TO SEE ON SCOPE
  44.     OUT    ERRSIG,3   *  FOR DEBUG PURPOSES
  45.     OUT    BEROUT,3   *  FOR DEBUG PURPOSES
  46.     OUT    RECI,3       *  FOR DEBUG PURPOSES
  47.     OUT    RECQ,3       *  FOR DEBUG PURPOSES
  48.     OUT    DPOINT,3   *  FOR DEBUG PURPOSES
  49.     OUT    CTRND,3    *  FOR DEBUG PURPOSES
  50. *
  51. *    UPDATE CARRIER ANGLE AT SAMPLE RATE
  52. *
  53.     LAC  RALPHA     * COMPUTE ADDRESS OF NEXT
  54.     ADD  RDELTA     * POINT FOR TABLE.
  55.     AND  MASK1     * KEEP MOD128, MASK=>7FFF.
  56.     SACL RALPHA     * SAVE NEXT ADDRESS
  57.     LAC  ONE,2     * SEE IF XMIT SQLCH BIT SET
  58.     AND  RECST     * IN THE STATUS REGISTER
  59.     BGZ  WAIT1     *
  60.     B    MASXMT     GO ON TO XMT TASK MASTER
  61. *
  62. CARLCK    LACK PLLC
  63.     TBLR PLL1
  64.     LACK BPLLC
  65.     TBLR BPLL1
  66. NORMAL    EQU  $
  67.     LAC  SAMPLE     DECREMENT THE SAMPLE COUNT
  68.     SUB  ONE     TO CHECK FOR END OF BAUD
  69.     BGEZ OVRSAM     IF NOT THEN SKIP COUNT RESET
  70.     LACK 15      RESTART THE SAMPLE COUNTER AT 15
  71. OVRSAM    SACL SAMPLE     SAVE NEW COUNT VALUE
  72.     LACK TSKSEQ     GET ADDRESS OF TOP OF TABLE
  73.     ADD  SAMPLE     ADD IN OFFSET
  74.     TBLR TEMP     GET THE PROGRAM ADDRESS
  75.     LAC  TEMP     FOR THE TASK CALL
  76.     CALA         EXECUTE THE APPROPRIATE TASK
  77.     B    DBUG1     RETURN TO THE WAIT LOOP
  78. *
  79. MASXMT    EQU  $
  80.     LAC  SAMXMT     DECREMENT THE SAMPLE COUNT
  81.     SUB  ONE     TO CHECK FOR END OF BAUD
  82.     BGEZ OVRSM1     IF NOT THEN SKIP COUNT RESET
  83.     LACK 15      RESTART THE SAMPLE COUNTER AT 15
  84. OVRSM1    SACL SAMXMT     SAVE NEW COUNT VALUE
  85.     LACK TSKXMT     GET ADDRESS OF TOP OF TABLE
  86.     ADD  SAMXMT     ADD IN OFFSET
  87.     TBLR TEMP     GET THE PROGRAM ADDRESS
  88.     LAC  TEMP     FOR THE TASK CALL
  89.     CALA         EXECUTE THE APPROPRIATE TASK
  90.     B    WAIT1     WAIT FOR NEXT SAMPLE TIMEOUT
  91.     PAGE
  92. DUMXMT EQU $
  93.        RET
  94. *
  95. ********************************************************
  96. *
  97. GETDBT EQU $
  98.        IN    XMTD,PA7     * GET NEW DIBIT
  99.        LACK  >30
  100.        AND   XMTD     * CHECK COMMAND BITS
  101.        BZ    COMD     * IF ZERO SQT MODEM, IDLE
  102. *
  103.        LACK  COEF     * RECYCLE IF FINISHED
  104.        SACL  XPTR
  105.        DMOV  XIBUF1     * SHIFT UP THE FILTER
  106.        DMOV  XIBUF0     * TO MAKE ROOM FOR
  107.        DMOV  XQBUF1     * FOR THE NEW DATA VALUE
  108.        DMOV  XQBUF0     * JUST INPUT
  109. *
  110.        LACK  3
  111.        AND   XMTD     * NEW DIBIT FROM 7000
  112.        ADD   OFSET1     * LOOKUP NEWPHASE
  113.        TBLR  XNEWPH
  114.        LAC   XOLDPH     * GET OLDPHASE.
  115.        ADD   XNEWPH     * ADD NEW PHASE.
  116.        AND   MASK3     * MASK WITH >0006.
  117.        SACL  XOLDPH     * STORE BACK 'NEW' OLDPHASE.
  118.        ADD   INDXPH     * LOOKUP I & Q INPUTS.
  119.        TBLR  XIBUF0
  120.        ADD   ONE
  121.        TBLR  XQBUF0
  122.        RET
  123. *
  124. DUMMY  CALL DEMOD    ATTEMPT DEMODULATION
  125.        RET        RETURN TO TASK MASTER
  126. *
  127. BAUDST EQU  $        SHOW START OF BAUD
  128.        LAC  MASK1
  129.        SACL DPOINT
  130.        CALL DEMOD
  131.        RET
  132. *
  133.        PAGE
  134. *
  135. DEMODB EQU  $
  136.        ZAC
  137.        SUB  MASK1
  138.        SACL DPOINT
  139.        LACK >BF     RESET THE CURRENT ZERO CROSSING
  140.        AND  RECST    FLAG IN THE STATUS REGISTER AND
  141.        SACL RECST    SAVE IT (BIT6=0 FOR MIDDLE OF BAUD)
  142. **********************************************************
  143. *****    DEMODUATE THE PASSBAND SIGNAL.             *****
  144. ********------------------------------------------********
  145. *****    RCVR. CARRIER SINE(COSINE) WAVE GENERATOR    *****
  146. **********************************************************
  147. DEMOD  EQU  $
  148.     LAC   RALPHA,8      * DELTA IS THE INCREMENT.
  149.     ADD   ONE,15      * ROUND IT UP
  150.     SACH  TEMP      * ISOLATE INTEGER PORTION.
  151.     LAC   TEMP      * MASK TO WITH THE 128 WORD
  152.     AND   MASK2      * SINE TABLE
  153.     ADD   OFSET0      * ADD INDEX TO SINE TABLE.
  154.     TBLR  SINA      * SINE VALUE,  (Q15).
  155.     LACK  >20      * ADD 90 DEGREES TO
  156.     ADD   TEMP      * THE ANGLE TO GET
  157.     AND   MASK2      * THE COSINE VALUE
  158.     ADD   OFSET0      * ADD INDEX TO COSINE TABLE.
  159.     TBLR  COSA      * COSINE VALUE, (Q15).
  160. *
  161. *********************************************************
  162. *
  163. CONT1    EQU   $
  164.     LT    ISUM
  165.     MPY   COSA      * A=(Yi * cosA)/2
  166.     PAC
  167.     LT    QSUM
  168.     MPY   SINA
  169.     APAC          * A=(Yi * cosA)/2 + (Yq * sin A)/2
  170.     SACH  RECI,1      * RECI= (Yi * cosA) + (Yq * sinA)
  171. *
  172. *---MUST DETERMINE SIGN OF I AND Q FOR ERROR CORRECTION---*
  173. *
  174.     LAC   RECI      * DETERMINE SIGN OF I CHAN
  175.     BGZ   DM1
  176.     LAC   MINUS1
  177.     B     DM2
  178. DM1    LAC   PLUS1
  179. DM2    SACL  SIGNI      * SAVE SIGN OF I
  180.     LT    ISUM
  181.     MPY   SINA
  182.     PAC          * A = (Yi * sinA)/2
  183.     LT    QSUM
  184.     MPY   COSA
  185.     SPAC          * A =[(Yi * sinA)/2] - [(Yq * cosA)/2]
  186.     SACH  RECQ,1      * RECQ = (Yi * sinA) - (Yq * cosA)
  187. *
  188.     LAC   RECQ      * DETERMINE SIGN OF Q CHAN
  189.     BGZ   DM3
  190.     LAC   MINUS1
  191.     B     DM4
  192. DM3    LAC   PLUS1
  193. DM4    SACL  SIGNQ
  194. *
  195. *---MUST DETERMINE ENERGY FOR BAUD CLOCK ALLIGNMENT---*
  196. *
  197.     LT    RECI
  198.     MPY   RECI    * FIND I**2
  199.     PAC
  200.     LT    RECQ
  201.     MPY   RECQ    * FIND Q**2
  202.     APAC
  203.     SACH  ENRGY    * ENERGY = (I**2) + (Q**2)
  204. *
  205.     RET          RETURN TO CALLING SEQUENCE
  206. ********------------------------------------------********
  207. *****    COMPUTE CARRIER ERROR SIGNAL.             *****
  208. *****    e(t) = RECI*SIGNQ - RECQ*SIGNI             *****
  209. ********------------------------------------------********
  210. COMERR ZAC
  211.        LT      RECI
  212.        MPY     SIGNQ
  213.        LTA     RECQ
  214.        MPY     SIGNI
  215.        SPAC
  216.        SACH    ERROR,1       * ERROR IS IN Q12
  217. ********------------------------------------------********
  218. *****    LOOP FILTER                    ******
  219. ********------------------------------------------********
  220.        ZAC
  221.        LT      PLL2
  222.        MPY     ERROR
  223.        LTA     PLL1
  224.        MPY     ERRSIG
  225.        APAC
  226.        SACH    ERRSIG,1    * ERRSIG IS IN Q12
  227. *********************************************************
  228. * CORRECT PHASE ERROR ONLY AT MIDDLE OF BAUD        *
  229. *********************************************************
  230. ************************************************************
  231. *  Adjust carrier phase +/-                   *
  232. *  one table entry if       - (2*trshld) > error > trshld   *
  233. *  two table entries if    - (2*trshld) < error >> trshld  *
  234. *  RALPHA is current local carrier table index.(in MSB )   *
  235. ************************************************************
  236. CKEROR    LAC   ERRSIG       *
  237.     BGZ   ERR1       * If error is -ve add threshold
  238.     ADD   TRSHD1       *
  239.     BGZ   ERRETN       * Still -ve?... add again
  240.     ADD   TRSHD1       *
  241.     BGZ   SUB1A       * still -ve?...
  242.     LAC   CTRND       * GET THE CARRIER UPDATE TREND
  243.     SUB   ONE,1       * ADD TWO
  244.     SACL  CTRND       * AND SAVE IT
  245.     LAC   RALPHA       * Error >> trshld; add 2 to index
  246.     SUB   ONE,9       *
  247.     B     DERR2       * DBUG CODE-TRAPS ON CDT LOSS
  248. SUB1A    LAC   CTRND       * GET THE CARRIER UPDATE TREND
  249.     SUB   ONE       * ADD ONE
  250.     SACL  CTRND       * AND SAVE IT
  251.     LAC   RALPHA       * Error > trshld; add 1 to index
  252.     SUB   ONE,8       *
  253.     B     ERR2       *
  254. ERR1    SUB   TRSHD1       * Error ia +ve; subtract threshold
  255.     BLZ   ERRETN       * Error  > trshld
  256.     SUB   TRSHD1       * see if error >> trshld
  257.     BLZ   ADD1A       * No...add one to index
  258.     LAC   CTRND       * GET THE CARRIER UPDATE TREND
  259.     ADD   ONE,1       * SUBTRACT TWO
  260.     SACL  CTRND       * AND SAVE IT
  261.     LAC   RALPHA       * Yes...add 2 to index
  262.     ADD   ONE,9       * SUB 2 same as ADD >7E in modulo 128
  263. DERR2    AND   MASK1
  264.     SACL  RALPHA
  265.     LAC   DBUGC       COMPARE BAUD COUNT
  266.     SUB   ONE,11        TO 2048
  267.     BLZ   DERR3       IF < THEN SYSTEM NOT STABLE
  268.     NOP           ELSE ENABLE TRAP CODE
  269.     NOP           BY STARTING DBUGC2 COUNT
  270. DERR3    RET
  271. ADD1A    LAC   CTRND       * GET THE CARRIER UPDATE TREND
  272.     ADD   ONE       * SUBTRACT ONE
  273.     SACL  CTRND       * AND SAVE IT
  274.     LAC   RALPHA       *
  275.     ADD   ONE,8       *
  276. ERR2    AND   MASK1      * Keep RALPHA modulo 128
  277.     SACL  RALPHA      * save new index
  278.     RET          * Return with corrected RALPHA
  279. ERRETN    LAC   ONE,4
  280.     OR    RECST        TO ACTIVE IN THE STATUS REGISTER
  281.     SACL  RECST        AND SAVE IT
  282. RETA    RET
  283. ******************************************************
  284. * OUT XMITS NEW DECODED DIBITS TO THE 7000
  285. *
  286. OUT    EQU   $
  287.        LACK  >3C     * MASK IN CDT,EDT & SQLCH BITS
  288.        AND   RECST     * FROM RECST REG.
  289.        OR    RDIBIT     * TO THE DIBIT VALUE
  290.        SACL  BITOUT     *AND SAVE THE SHIFTED VALUE
  291.        OUT   BITOUT,PA7  *XMIT TO 7000
  292.        CALL  DEMOD     * DEMODULATE TO CONTINUE PLOT
  293.        RET         * BACK TO CALLER
  294. *
  295. ********------------------------------------------********
  296. *****     PHASE DECODING - BINARY TO GRAY CODE         *****
  297. * THIS ROUTINE CALCULATES PHASE SHIFT FROM OLDPH TO THE  *
  298. * CURRENT ABSOLUTE PHASE, GREY CODE RESULT TO GET DIBIT  *
  299. ********------------------------------------------********
  300. DECODE EQU   $
  301.        OUT   RECI,PA4
  302.        OUT   RECQ,PA4
  303.        LAC   RECI      * DETERMINE ABSOLUTE PHASE
  304.        BGZ   ABS1
  305.        LAC   RECQ
  306.        BGZ   ABS2
  307.        LACK  2           * PHASE IS 2 (0 deg)
  308.        B     DIFFER    *
  309. ABS2   LACK  3           * PHASE IS 3 (270 deg)
  310.        B     DIFFER    *
  311. ABS1   LAC   RECQ
  312.        BGZ   ABS3
  313.        LACK  1           * PHASE IS 1 (180 deg)
  314.        B     DIFFER    *
  315. ABS3   LACK  0           * PHASE IS 0 (90 deg)
  316. *               *
  317. DIFFER SACL  TEMP
  318.        SUB   ROLDPH    * SUBTRACT PREVIOUS ABSO-
  319.        BGEZ  DF1       * LUTE PHASE (BINARY CODED)
  320.        ADD   ONE,2     * ADD 4
  321. DF1    ADD   RPHSE     * MAP PHASE CHANGE TO DIBIT
  322.        TBLR  RDIBIT
  323.        NOP
  324.        LAC   TEMP
  325.        SACL  ROLDPH
  326.        CALL  COMERR    * COMPUTE ERROR USING PRESENT PHASE
  327. *             AND CORRECT PHASE OF LOCAL CARRIER
  328.        CALL  DEMOD     * DEMODULATE TO CONTINUE PLOT
  329.        RET
  330. ***********************************************************
  331. *****     BAUD  CLOCK  ALLIGNMENT               ****
  332. ***********************************************************
  333. BDCLK1 CALL  DEMOD
  334.        LAC   ENRGY
  335.        SACL  PENRGY
  336.        RET
  337. BDCLK2 CALL  DEMOD
  338.        LAC   ONE,6
  339.        AND   RECST    * TEST IF CORRECTION IS MADE
  340.        BNZ   RETB     * IF SO RETURN
  341.        LAC   ENRGY
  342.        SUB   PENRGY   * FORM ERROR SIGNAL
  343.        SACL  BERROR
  344. ********-------------------------------------------**********
  345. ****    LOOP  FILTER                      *******
  346. ********-------------------------------------------**********
  347.        ZAC
  348.        LT    BPLL2
  349.        MPY   BERROR
  350.        LTA   BPLL1
  351.        MPY   BEROUT
  352.        APAC
  353.        SACH  BEROUT,1       * BEROUT IN Q14
  354. *
  355. *---APPLY  CORRECTION
  356. *
  357.        LAC   BEROUT
  358.        BGEZ  POS
  359.        ADD   TRSHD2
  360.        BGEZ  RETB
  361.        ADD   TRSHD2
  362.        BGEZ  SUB1B
  363.        LAC   SAMPLE
  364.        SUB   ONE,1
  365.        SACL  SAMPLE
  366.        B     RETB
  367. SUB1B  LAC   SAMPLE
  368.        SUB   ONE
  369.        SACL  SAMPLE
  370.        B     RETB
  371. POS    SUB   TRSHD2
  372.        BLZ   RETB
  373.        SUB   TRSHD2
  374.        BLZ   ADD1B
  375.        LAC   SAMPLE
  376.        ADD   ONE,1
  377.        SACL  SAMPLE
  378.        B     RETB
  379. ADD1B  LAC   SAMPLE
  380.        ADD   ONE
  381.        SACL  SAMPLE
  382. RETB   LAC   ONE,6
  383.        OR    RECST
  384.        SACL  RECST
  385.        RET
  386. **************************************************************************
  387.        PAGE
  388. ***********************************************************
  389. *****  CARRIER TREND UPDATE                   ****
  390. *****                               ****
  391. *****  THIS ROUTINE CALCULATES THE CARRIER SHIFT       ****
  392. *****  TRENDS OVER 16 BAUD INTERVALS (256 SAMPLES)     ****
  393. *****  AND CALCULATES A FRACTIONAL VALUE TO INCREASE   ****
  394. *****  (OR DECREASE) THE SINE TABLE STEP VALUE           ****
  395. *****                               ****
  396. ***********************************************************
  397. TRENDS EQU  $
  398.        CALL DEMOD     DEMODULATE TO CONTINUE PLOT
  399.        LAC  ONE,4     CHECK OPERATING STATUS FOR
  400.        AND  RECST     CARRIER DETECT
  401.        BZ   NOTYET     IF NO CDT THEN DON'T UPDATE
  402.        LAC  TRNDCT     DECREMENT TREND BAUD COUNT
  403.        SUB  ONE      BY ONE TO SEE IF IT IS READY FOR
  404.        BZ   TUPDT     NEXT UPDATE
  405.        SACL TRNDCT     NO, SKIP UPDATE
  406. NOTYET RET         AND RETURN TO CALLING SEQUENCE
  407. *
  408. TUPDT  LACK 16         RESET THE TREND BAUD COUNTER
  409.        SACL TRNDCT     TO 16 FOR NEXT BLOCK
  410.        LAC  CTRND     GET THE TREND VALUE
  411.        BLZ  OTRND1     IF NEGATIVE HANDLE APPROPRIATELY
  412.        SUB  ONE,2     COMPARE IT TO 4
  413.        BLEZ OTRND     IF CTRND < 4 THEN
  414.        LAC  RDELTA     GET THE SINE INCREMENT VALUE
  415.        ADD  ONE      INCREMENT CARRIER DELTA
  416.        SACL RDELTA     AND SAVE IT
  417. OTRND  ZAC         CLEAR THE ACCUMULATOR
  418.        SACL CTRND     TO CLEAR OUT OLD TREND VALUE
  419.        RET         RETURN TO CALLING SEQUENCE
  420. OTRND1 ADD  ONE,2     COMPARE TO -4
  421.        BGEZ OTRND     IF CTRND > -4 THEN
  422.        LAC  RDELTA     GET THE SINE INCREMENT VALUE
  423.        SUB  ONE      DECREMENT THE CARRIER DELTA
  424.        SACL RDELTA     AND SAV IT
  425.        B    OTRND     AND FINISH
  426. *
  427.        END
  428.